/**
 * OSS对象存储工具类
 * 用于处理腾讯云OSS的URL格式规范化
 */

// 格式化OSS URL，修复格式错误的URL
export function formatOssUrl(url) {
  if (!url) return '';

  console.log('OSS Utils - 处理URL:', url);

  // 首先检查是否是完整的URL（以http://或https://开头）
  const isFullUrl = url.toLowerCase().startsWith('http://') || url.toLowerCase().startsWith('https://');
  const isTencentCosUrl = url.includes('.cos.') && url.includes('myqcloud.com');
  
  // 如果是完整的腾讯云URL，直接返回
  if (isFullUrl && isTencentCosUrl) {
    console.log('OSS Utils - 检测到完整的腾讯云COS URL，直接返回:', url);
    return url;
  }
  
  // 1. 修复包含重复前缀和域名的URL格式
  // 例如: /profile/zhinengsuo-1305759786.cos.ap-guangzhou.myqcloud.com//profile/2025/03/15/xxx
  // 需要改为: /profile/2025/03/15/xxx
  if (url.includes('/profile/') && url.includes('.cos.') && url.includes('myqcloud.com')) {
    console.log('OSS Utils - 检测到包含域名的错误URL格式，准备修复');
    
    // 查找最后一个 /profile/ 的位置
    const lastProfileIndex = url.lastIndexOf('/profile/');
    if (lastProfileIndex > 0) {
      // 只保留最后一个 /profile/ 之后的内容
      url = url.substring(lastProfileIndex);
      console.log('OSS Utils - 修复后的路径:', url);
    }
    
    // 修复双斜杠问题
    url = url.replace(/\/\//g, '/');
    console.log('OSS Utils - 修复双斜杠后的路径:', url);
  }

  const baseUrl = process.env.VUE_APP_BASE_API;

  // 2. 处理正常URL
  // 如果已经是完整的URL，则直接返回
  if (isFullUrl) {
    console.log('OSS Utils - 检测到完整URL，直接返回:', url);
    return url;
  }

  // 避免重复添加baseUrl
  // 检查URL是否已经包含baseUrl（去掉前导/的情况）
  const baseUrlWithoutProtocol = baseUrl.replace(/^https?:\/\//, '');
  if (url.includes(baseUrlWithoutProtocol)) {
    console.log('OSS Utils - URL已包含baseUrl，直接返回:', url);
    return url;
  }

  // 如果是以/开头的相对路径，添加基础API地址
  if (url.startsWith('/')) {
    const result = baseUrl + url;
    console.log('OSS Utils - 添加基础API到路径:', result);
    return result;
  }

  // 其他情况，确保有正确的路径分隔符，然后添加基础API地址
  const result = baseUrl + (url.startsWith('/') ? '' : '/') + url;
  console.log('OSS Utils - 构建完整URL:', result);
  return result;
}

// 将URL格式化为相对路径（用于保存到数据库）
export function formatOssUrlForStorage(url) {
  if (!url) return '';
  
  console.log('OSS Utils - 格式化URL用于存储:', url);
  
  // 处理错误格式的URL
  let processedUrl = url;
  
  // 1. 修复包含重复前缀和域名的URL格式
  if (url.includes('/profile/') && url.includes('.cos.') && url.includes('myqcloud.com')) {
    console.log('OSS Utils - 存储前修复包含域名的错误URL格式');
    
    // 查找最后一个 /profile/ 的位置
    const lastProfileIndex = url.lastIndexOf('/profile/');
    if (lastProfileIndex > 0) {
      // 只保留最后一个 /profile/ 之后的内容
      processedUrl = url.substring(lastProfileIndex);
    }
    
    // 修复双斜杠问题
    processedUrl = processedUrl.replace(/\/\//g, '/');
  }
  
  // 2. 处理正常URL
  // 如果 URL 是完整的 URL（以 http:// 或 https:// 开头），则需要移除基础 URL 前缀
  const baseUrl = process.env.VUE_APP_BASE_API;
  if (processedUrl.toLowerCase().startsWith('http://') || processedUrl.toLowerCase().startsWith('https://')) {
    // 尝试移除基础URL前缀
    if (processedUrl.startsWith(baseUrl)) {
      processedUrl = processedUrl.substring(baseUrl.length);
      if (!processedUrl.startsWith('/')) {
        processedUrl = '/' + processedUrl;
      }
    }
    // 如果不是以baseUrl开头，但可能是完整的腾讯云URL，则尝试保留相对路径
    else if (processedUrl.includes('.cos.') && processedUrl.includes('myqcloud.com') && processedUrl.includes('/profile/')) {
      const profileIndex = processedUrl.indexOf('/profile/');
      if (profileIndex > 0) {
        processedUrl = processedUrl.substring(profileIndex);
      }
    }
  }
  
  console.log('OSS Utils - 存储格式化结果:', processedUrl);
  return processedUrl;
}

// 检查是否为图片URL（根据扩展名判断）
export function isImageUrl(url) {
  if (!url) return false;
  
  const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg'];
  const extension = url.split('.').pop().toLowerCase();
  
  return imageExtensions.includes(extension);
}

// 将对象列表转换为URL字符串，用于提交表单
export function listToString(list, separator = ',') {
  if (!list || list.length === 0) return '';
  
  console.log('OSS Utils - 转换图片列表为字符串:', list);
  
  let strs = "";
  
  for (let i in list) {
    if (list[i].url) {
      // 格式化URL用于存储
      const processedUrl = formatOssUrlForStorage(list[i].url);
      strs += processedUrl + separator;
    }
  }
  
  const result = strs !== '' ? strs.substr(0, strs.length - 1) : '';
  console.log('OSS Utils - 转换结果:', result);
  return result;
} 